package databases

import (
	"fmt"
	"peilian-api/app/global/variable"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

//var Db = Connect()
//
//func Connect() *gorm.DB {
//	dsn := fmt.Sprintf(
//		"%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s",
//		variable.Config.Mysql.UserName,
//		variable.Config.Mysql.PassWord,
//		variable.Config.Mysql.Host,
//		variable.Config.Mysql.Port,
//		variable.Config.Mysql.DBName,
//		variable.Config.Mysql.TimeOut,
//	)
//	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
//	if err != nil {
//		panic("连接数据库失败, error=" + err.Error())
//	}
//	sqlDB, _ := db.DB()
//	//设置数据库连接池参数
//	sqlDB.SetMaxOpenConns(100) //设置数据库连接池最大连接数
//	sqlDB.SetMaxIdleConns(20)  //连接池最大允许的空闲连接数，如果没有sql任务需要执行的连接数大于20，超过的连接会被连接池关闭。
//	return db
//}
//
//func init() {
//
//}

func InitMySQL() (*gorm.DB, error) {
	dsn := fmt.Sprintf(
		"%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s",
		variable.Config.Mysql.UserName,
		variable.Config.Mysql.PassWord,
		variable.Config.Mysql.Host,
		variable.Config.Mysql.Port,
		variable.Config.Mysql.DBName,
		variable.Config.Mysql.TimeOut,
	)
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger:                                   logger.Default.LogMode(logger.Info),
		DisableForeignKeyConstraintWhenMigrating: true,
		SkipDefaultTransaction:                   false,
	})
	if err != nil {
		return nil, err
	}
	sqlDB, _ := db.DB()
	//设置数据库连接池参数
	sqlDB.SetMaxOpenConns(200) //设置数据库连接池最大连接数
	sqlDB.SetMaxIdleConns(200) //连接池最大允许的空闲连接数，如果没有sql任务需要执行的连接数大于20，超过的连接会被连接池关闭。
	sqlDB.SetConnMaxIdleTime(time.Hour * 24)
	return db, nil
}
